android+NDK 入门备忘 ubuntu 11.10 您所在的位置:网站首页 ubuntu ndk android+NDK 入门备忘 ubuntu 11.10

android+NDK 入门备忘 ubuntu 11.10

2023-03-11 14:06| 来源: 网络整理| 查看: 265

使用NDK时的大致步骤如下:

1.  新建一个Android 工程,在里面新建一个jni 文件夹,专门用来存放 C 语言程序和Android.mk 文件;

2.  在java文件中编写一个 native 函数: 

123456789101112131415161718192021package tangyuchun.ndk.hellojni; import android.app.Activity;import android.os.Bundle;import android.widget.TextView; public class HellojniActivity extends Activity {    static {        System.loadLibrary("hello-jni");    }     public native static String getString();     public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);         TextView tv = new TextView(this);        tv.setText(getString());// 调用了native方法        setContentView(tv);    }}

这里是一个简单的Activity界面,里面定义了一个 getString()方法,用来获取一个字符串。

3.  打开终端,使用 javah -classpath 命令编译 bin/classes 下生成的 .class文件。我的命令如下:

12javah -classpath /home/administrator/android_code/hello-jni/bin/classes tangyuchun.ndk.hellojni.HellojniActivity

也可以在src的 .java 源代码中使用同样的命令: 

12javah -classpath /home/administrator/android_code/hello-jni/src tangyuchun.ndk.hellojni.HellojniActivity

记得在前面要加上包名(我的是在tangyuchun.ndk.hellojni 这个包下面)。

 4.  经过第3步后,就会在该类目录下生成一个 .h 的头文件(ubuntu也有可能生成在主文件夹下面),名字为 

    tangyuchun_ndk_hellojni_HellojniActivity.h,打开这个头文件,内容如下:

1234567891011121314151617181920#include /* Header for class tangyuchun_ndk_hellojni_HellojniActivity */ #ifndef _Included_tangyuchun_ndk_hellojni_HellojniActivity#define _Included_tangyuchun_ndk_hellojni_HellojniActivity#ifdef __cplusplusextern "C" {#endif/* * Class:     tangyuchun_ndk_hellojni_HellojniActivity * Method:    getString * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_tangyuchun_ndk_hellojni_HellojniActivity_getString  (JNIEnv *, jclass); #ifdef __cplusplus}#endif#endif

 5. 看到里面有一个函数: JNIEXPORT jstring JNICALL Java_tangyuchun_ndk_hellojni_HellojniActivity_getString(JNIEnv *, jclass);

    这个方法就与第2步的getString()对应。

6.  在jni 文件夹中新建一个 c语言文件,我的是 hello-jni.c ,include相应的头文件,然后将第4步中的那个方法复制,完成该方法:

1234567891011#include #include #include #include #include  JNIEXPORT jstring JNICALL Java_tangyuchun_ndk_hellojni_HellojniActivity_getString(  JNIEnv *env, jclass thiz) { return (*env)->NewStringUTF(env, "Some say love");        //这里只是做个样例,所以只让他返回一段字符串 "Some say love"}

注意,要给方法添加参数,头文件中只是声明,并没有实参。

7.  同样,在 jni 文件夹下面新建一个 Android.mk 文件,内容如下:

12345678LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE    := hello-jniLOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY)

那个LOCAL_MODULE 就是将要生成的.so 文件名,LOCAL_SRC_FILES就是第6步中编写的 .c 文件。

8.  保存上述文件,打开终端,定位到工程的目录下的jni 文件夹,在终端输入: ndk-build 命令,回车。

9.  返回到工程文件夹下,就会看到生成了两个文件夹 libs 和 obj,其中 libs/armeabi/ 文件夹下面就有 一个 libhello-jni.so 文件,这

个.so文件其实就是用来在android中调用C语言的类库;

10. 在Android虚拟机上运行上面建立的工程,如下所示:

                                                       

              

-------------------2012-07-22 23:58:00

Android+NDK 入门备忘 ubuntu 11.10 android+NDK 入门备忘 ubuntu 11.10 android-ndk-ubuntu-入门 ubuntu下 Android NDK入门 【Android】 JNI入门 - NDK从入门到精通(备忘) 【Android】Android NDK入门 Ubuntu Android NDK配置 ubuntu 安装 Android NDK ubuntu安装Android NDK ubuntu安装android-ndk Android NDK 使用入门 Android NDK入门搭建 Android NDK编程入门 Android: NDK编程入门 Android ndk开发入门 Android NDK编程入门 android ndk 入门实践 android ndk 入门 禁止空格提交表单 Hadoop错误总结 黑马程序员_毕向东_Java基础视频教程学习笔记(十) Ubuntu下 Android真机 显示????????????no permissions 快速解决 在Genymotion虚拟机上安装GoogleApps android+NDK 入门备忘 ubuntu 11.10 Activity的LaunchMode和taskAffinity 启动Heartbeat Java调用Hbase shell I/O重定向 1 VS2010下解决Active X运行容器 expdp导出报错解决过程 本人唯一一次noip后的感言 如何检索Android设备的唯一ID


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有